//package 题目集.前缀树;
//
//import java.util.Scanner;
//
//public class Main {
//    /**
//     * 异或的抽象题
//     * 这题暴力是枚举两个数，固定一个数，找与之配对的最大值。
//     * 找与之配对的最大值这一步可以优化
//     * 假设固定的数是a，其二进制值为0110010
//     * 他期望找到的最大值是每一位都与他相反的数。
//     * 所以我们可以预先对每个数构建一个Trie，存储的是每个数的二进制信息。
//     */
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();
//        int[] arr = new int[n];
//        for (int i = 0; i < arr.length; i++) {
//            arr[i] = sc.nextInt();
//            put(arr[i]);
//        }
//        int res = 0;
//        for (int i = 0; i < n; i++) {
//            int v = match(arr[i]);
//            res = Math.max(res, v ^ arr[i]);
//        }
//        System.out.println(res);
//    }
//
//    static Trie root = new Trie();
//    static int f = 1 << 30;
//
//    static void put(int x) {
//        Trie cur = root;
//        for (int i = 0; i < 30; i++) {
//            int to = (f & x) == 0 ? 0 : 1;
//            x=x<<1;
//            if (cur.next[to] == null) {
//                cur.next[to] = new Trie();
//            }
//            cur = cur.next[to];
//        }
//    }
//
//    public static int match(int x) {
//        Trie cur = root;
//        int res = 0;
//        for (int i = 0; i < 30; i++) {
//            int to = (f & x) == 0 ? 1 : 0;
//            x=x<<1;
//            if (cur.next[to] != null) {
//                res = (res << 1) | to;
//            } else {
//                //最低位取反
//                to = 1 ^ to;
//                res = (res << 1) | to;
//            }
//            cur = cur.next[to];
//            x = x >> 1;
//        }
//        return res;
//    }
//
//    static class Trie {
//        Trie[] next = new Trie[2];
//
//    }
//}
